<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"
    />
    <style>
      /* 
        v-enter-from：进入动画的起始状态。在元素插入之前添加，在元素插入完成后的下一帧移除。

        v-enter-active：进入动画的生效状态。应用于整个进入动画阶段。在元素被插入之前添加，在过渡或动画完成之后移除。这个 class 可以被用来定义进入动画的持续时间、延迟与速度曲线类型。

        v-enter-to：进入动画的结束状态。在元素插入完成后的下一帧被添加 (也就是 v-enter-from 被移除的同时)，在过渡或动画完成之后移除。

        v-leave-from：离开动画的起始状态。在离开过渡效果被触发时立即添加，在一帧后被移除。

        v-leave-active：离开动画的生效状态。应用于整个离开动画阶段。在离开过渡效果被触发时立即添加，在过渡或动画完成之后移除。这个 class 可以被用来定义离开动画的持续时间、延迟与速度曲线类型。

        v-leave-to：离开动画的结束状态。在一个离开动画被触发后的下一帧被添加 (也就是 v-leave-from 被移除的同时)，在过渡或动画完成之后移除。
      */

      /* 下面我们会解释这些 class 是做什么的 */
      .fade-enter-from {
        transform: translateX(-200px);
        opacity: 0;
      }
      .fade-leave-to {
        transform: translateX(200px);
        opacity: 0;
      }
      .aaa,
      .fade-leave-active {
        transition: all 1s;
      }

      /* ------------------------------- */

      /* .fade2-enter-active,
      .fade2-leave-active {
        transition: opacity 0.5s ease;
      }

      .fade2-enter-from,
      .fade2-leave-to {
        opacity: 0;
      } */
    </style>
  </head>
  <body>
    <div id="app">
      <h2>过渡和动画</h2>
      <button @click="show = !show">Toggle</button>
      <!-- 
        <Transition>标签用于给元素通过v-if或者v-show的切换的时候，来添加过渡和动画
          -->
      <transition name="fade" enter-active-class="aaa">
        <p v-if="show">和咯</p>
      </transition>

      <hr />

      <button @click="show2 = !show2">Toggle</button>
      <transition
        name="fade2"
        enter-active-class="animate__animated animate__bounce"
        leave-active-class="animate__animated animate__jello"
      >
        <p v-if="show2" style="width: 34px">和咯</p>
      </transition>
    </div>

    <script src="./lib/vue3.js"></script>
    <script>
      Vue.createApp({
        data() {
          return {
            show: true,
            show2: true,
          };
        },
      }).mount("#app");
    </script>
  </body>
</html>
